package com.ruoyi.system.service;

import java.util.List;
import java.util.Set;

import com.ruoyi.common.core.domain.entity.SysAeration;
import com.ruoyi.common.core.domain.entity.SysFeed;
import com.ruoyi.system.domain.SysUserAeration;
import com.ruoyi.system.domain.SysUserFeed;

/**
 * 投喂机业务层
 *
 * @author xiongdong
 */
public interface ISysFeedService {
    /**
     * 根据条件分页查询投喂机数据
     *
     * @param sysFeed 投喂机信息
     * @return 投喂机数据集合信息
     */
    public List<SysFeed> selectSysFeedList(SysFeed sysFeed);

    /**
     * 根据用户ID查询投喂机列表
     *
     * @param userId 用户ID
     * @return 投喂机列表
     */
    public List<SysFeed> selectSysFeedsByUserId(Long userId);

    /**
     * 根据用户ID查询投喂机权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    public Set<String> selectSysFeedPermissionByUserId(Long userId);

    /**
     * 查询所有投喂机
     *
     * @return 投喂机列表
     */
    public List<SysFeed> selectFeedAll();

    /**
     * 根据用户ID获取投喂机选择框列表
     *
     * @param userId 用户ID
     * @return 选中投喂机ID列表
     */
    public List<Long> selectFeedListByUserId(Long userId);

    /**
     * 通过投喂机ID查询投喂机
     *
     * @param feedId 投喂机ID
     * @return 投喂机对象信息
     */
    public SysFeed selectFeedById(Long feedId);

    /**
     * 校验投喂机名称是否唯一
     *
     * @param sysFeed 投喂机信息
     * @return 结果
     */
    public String checkFeedNameUnique(SysFeed sysFeed);

    /**
     * 校验投喂机权限是否唯一
     *
     * @param sysFeed 投喂机信息
     * @return 结果
     */
    public String checkFeedKeyUnique(SysFeed sysFeed);

    /**
     * 校验投喂机是否允许操作
     *
     * @param sysFeed 投喂机信息
     */
    public void checkFeedAllowed(SysFeed sysFeed);

    /**
     * 校验投喂机是否有数据权限
     *
     * @param feedId 投喂机id
     */
    public void checkFeedDataScope(Long feedId);

    /**
     * 通过投喂机ID查询投喂机使用数量
     *
     * @param feedId 投喂机ID
     * @return 结果
     */
    public int countUserFeedByFeedId(Long feedId);

    /**
     * 新增保存投喂机信息
     *
     * @param sysFeed 投喂机信息
     * @return 结果
     */
    public int insertFeed(SysFeed sysFeed);

    /**
     * 修改保存投喂机信息
     *
     * @param sysFeed 投喂机信息
     * @return 结果
     */
    public int updateFeed(SysFeed sysFeed);

    /**
     * 修改投喂机状态
     *
     * @param sysFeed 投喂机信息
     * @return 结果
     */
    public int updateFeedStatus(SysFeed sysFeed);

    /**
     * 修改数据权限信息
     *
     * @param sysFeed 投喂机信息
     * @return 结果
     */
    public int authDataScope(SysFeed sysFeed);

    /**
     * 通过投喂机ID删除投喂机
     *
     * @param feedId 投喂机ID
     * @return 结果
     */
    public int deleteFeedById(Long feedId);

    /**
     * 批量删除投喂机信息
     *
     * @param feedIds 需要删除的投喂机ID
     * @return 结果
     */
    public int deleteFeedByIds(Long[] feedIds);

    /**
     * 取消授权用户投喂机
     *
     * @param userFeed 渔场和投喂机关联信息
     * @return 结果
     */
    public int deleteUserFeed(SysUserFeed userFeed);

    /**
     * 批量取消授权用户投喂机
     *
     * @param feedId   投喂机ID
     * @param userIds 需要取消授权的用户数据ID
     * @return 结果
     */
    public int deleteDeptFeeds(Long feedId, Long[] userIds);

    /**
     * 批量选择授权用户投喂机
     *
     * @param feedId   投喂机ID
     * @param userIds 需要删除的用户数据ID
     * @return 结果
     */
    public int insertDeptFeeds(Long feedId, Long[] userIds);
}
